home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 4 / FM Towns Free Software Collection 4 - Disc 1.iso / t_os / tmdsp / tbox.c < prev    next >
C/C++ Source or Header  |  1991-10-18  |  2KB  |  98 lines

  1. /*
  2.     TBOX.C Ver 0.02 1991.08.09  by Y.Kurihara (Nif PDC01620)"
  3.         T-MENU の画面にちょっかいを出すプログラム  その4
  4.  
  5.     (1) TBOX  <X座標> <Y座標> <桁数> <行数> [TYPE]
  6.  
  7.     (1) 指定範囲に枠をかく
  8. */
  9.  
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include <dos.h>
  13. #include <machine.h>
  14.  
  15. #define  X0    (2)
  16. #define  Xl    (76)
  17. #define  Y0    (7)
  18. #define  Yl    (20)
  19.  
  20. #define VRAM( offset )  ( (char far *)MK_FP( 0xc000,( offset ) ) )
  21. #define PORTpage     (0xff83)
  22. #define PORTplane    (0xff81)
  23. #define Y1page       (256)
  24.  
  25. extern int   boxcnt;
  26. extern char *boxbit[];
  27.  
  28. void box_part( int x1,int y1,int x2,char *bit )
  29. {
  30.     unsigned int x,y;
  31.     unsigned int off;
  32.  
  33.     if( y1 < Y1page ) {
  34.         outp( PORTpage, 0x00 );
  35.         off = y1 * 128;
  36.     } else {
  37.         outp( PORTpage, 0x10 );
  38.         off = ( y1 - Y1page )* 128;
  39.     }
  40.     for( y = 0; y < 8; y++ ) {
  41.         *VRAM( off + x1 ) = ~ bit[0];
  42.         for( x = x1 + 1; x < x2; x++ )
  43.             *VRAM( off + x ) = ~ bit[1];
  44.         *VRAM( off + x2 ) = ~ bit[2];
  45.         off += 128;
  46.         bit +=3;
  47.     }
  48.     return;
  49. }
  50.  
  51. void box( int x1,int y1,int x2,int y2,int n )
  52. {
  53.     int y;
  54.     char *bit;
  55.  
  56.     bit = boxbit[n];
  57.     box_part( x1,y1 * 16 + 8,x2,bit );
  58.     for( y = y1 + 1; y < y2; y++ ) {
  59.         box_part( x1,y * 16 ,x2,bit + 24 );
  60.         box_part( x1,y * 16 + 8,x2,bit + 24 );
  61.     }
  62.     box_part( x1,y2 * 16,x2,bit + 48 );
  63.     return;
  64. }
  65.  
  66. main( int argc,char **argv )
  67. {
  68.     int save_page;
  69.     int save_plane;
  70.     int x1 = X0;
  71.     int y1 = Y0;
  72.     int x2 = Xl;
  73.     int y2 = Yl;
  74.     int n  = 0;
  75.  
  76.     if( argc >= 2 )  x1 = atoi( argv[1] );
  77.     if( argc >= 3 )  y1 = atoi( argv[2] );
  78.     if( argc >= 4 )  x2 = atoi( argv[3] );
  79.     if( argc >= 5 )  y2 = atoi( argv[4] );
  80.     if( argc >= 6 )  n  = atoi( argv[5] );
  81.  
  82.     if( x1 < 0 || y1 < 0 || x2 < 3 || y2 < 3 )  exit(1);
  83.     if( x1 >= 80 || y1 >= 30 )  exit(1);
  84.     if( ( x2 = x1 + x2 - 1 ) >= 80 )  x2 = 79;
  85.     if( ( y2 = y1 + y2 - 1 ) >= 30 )  y2 = 29;
  86.     if( n < 0 || n >= boxcnt )  n = 0;
  87.  
  88.     save_page  = inp( PORTpage );
  89.     save_plane = inp( PORTplane );
  90.     outp( PORTplane,15 );
  91.  
  92.     box( x1,y1,x2,y2,n );
  93.  
  94.     outp( PORTpage,  save_page );
  95.     outp( PORTplane, save_plane );
  96.     exit( 0 );
  97. }
  98.